# 进行是否重新选择，在yn_option基础上封装了一下
def re_option(opt):
    return yn_option(f"是否重新{opt}（y 是/n 否)")


# 进行是否选择
def yn_option(message):
    return valid_option(message, 'y', 'n')


def valid_option(message, t_opt, f_opt):
    while True:
        opt = input(message)
        if opt.lower() == f_opt:
            return False
        elif opt.lower() == t_opt:
            return True
        else:
            print("无效输入")


def option_input(option_list):
    length = len(option_list)
    print("**************************************************")
    for i, opt in enumerate(option_list, 1):
        print(f"{i}. {opt}")
    return valid_option_input(length)


# 使输入的账单id为合法id
def valid_id_input(ll):
    ids = [int(item.id) for item in ll]
    while True:
        try:
            input_id = int(input("请输入要进行操作的账户ID："))
            if input_id not in ids:
                print("请输入合法范围的账户ID！")
                continue
            return input_id
        except ValueError:
            print("请输入数字")
            continue


def valid_option_input(length):
    while True:
        input_opt = input(f"请输入要操作的序号：[1至{length}]：")
        try:
            # 尝试将输入转换为整数
            number = int(input_opt)
            # 检查数字是否在合法范围内
            if 1 <= number <= length:
                return input_opt
            else:
                print("请输入合法范围的操作序号")
                continue
        except ValueError:
            # 如果输入无法转换为整数，返回False
            print("请输入整数")
            continue
